const jwt=require('jsonwebtoken');//token

const {parse}=require('url');

const {
    WHITE_LIST,
    TOKEN_KEY
}=require('../config')

exports.auth=async (ctx,next)=>{//next 向下执行
    // console.log(ctx.request.url);
    const {pathname}=parse(ctx.request.url);
    // console.log(pathname);
    //判断是否在白名单中
   let flag= WHITE_LIST.includes(pathname);
   if(!flag){//不在白名单中

        //获取token
        const token=ctx.request.headers['authorization'];
        if(!token){
            ctx.body={
                code:1002,
                msg:'token不存在'
            }
        }else{//token存在
            //校验token，获取失效时间
            // 使用 jwt.verify 方法来解析token 参数1：token 参数2：token密钥
            let {exp,tim}= jwt.verify(token,TOKEN_KEY);
            // console.log(new Date().getTime(),exp,tim);
            if(+new Date() >exp){//当前时间大于失效时间
                ctx.status=401;//没有权限访问
                ctx.body={
                    code:1002,
                    msg:'token已失效'
                }
            }else{
                await next();//继续执行
            }
        }
   }else{//在token白名单,无需校验，直接执行下一步
       await next()
   }
}